package com.lantian.common.config;

import com.lantian.common.utils.file.MinioUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;

/**
 * MinIO 配置类
 * <p>
 * 负责初始化 MinIO 客户端连接配置，从配置文件中读取 MinIO 服务相关参数
 * 并在应用启动时自动初始化 MinIO 客户端
 *
 * @author mengxiangchu
 */
@Configuration
@ConditionalOnProperty(prefix = "minio", name = "enabled", havingValue = "true", matchIfMissing = true)
public class MinioConfig {

    /**
     * MinIO 服务端点地址
     * 从配置文件中读取 minio.endpoint 属性值
     */
    @Value("${minio.endpoint}")
    private String endpoint;

    /**
     * MinIO 访问密钥
     * 从配置文件中读取 minio.accessKey 属性值，相当于用户名
     */
    @Value("${minio.accessKey}")
    private String accessKey;

    /**
     * MinIO 密钥
     * 从配置文件中读取 minio.secretKey 属性值，相当于密码
     */
    @Value("${minio.secretKey}")
    private String secretKey;

    /**
     * 是否使用 HTTPS 协议
     * 从配置文件中读取 minio.secure 属性值，true 表示使用 HTTPS，false 表示使用 HTTP
     */
    @Value("${minio.secure}")
    private boolean secure;

    /**
     * 初始化 MinIO 客户端
     * <p>
     * 使用 @PostConstruct 注解，确保在 Bean 初始化完成后自动执行
     * 调用 MinioUtils 的静态方法初始化 MinIO 客户端连接
     *
     * @see MinioUtils#initClient(String, String, String, boolean)
     */
    @PostConstruct
    public void init() {
        MinioUtils.initClient(endpoint, accessKey, secretKey, secure);
    }
}
